<?php

namespace App\Http\Controllers\Admin;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Model\User;
use Illuminate\Support\Facades\Hash;

use Illuminate\Foundation\Auth\AuthenticatesUsers;  
use Auth;

// 使用bcrypt() 加密
// 引入Hash use Illuminate\Support\Facades\Hash;
// 使用Hash::check() 验证

class UserController extends Controller
{
    protected $guard = 'user';

    // 用户管理列表页
    function index(){

        $data = User::paginate(8);
        
        return view('admin.user.index',['data' => $data]);

    }


    // 管理员修改密码 
    function update(Request $request,$id){
        // 如果是post提交
        if($request->isMethod('POST')){
            // 获取表单密码
            $new_password = $request->input('password');
            // 调用函数重置密码
            $resetpas = $this->resetPassword($id,$new_password);
            // 判断是否重置成功
            if($resetpas){
                return redirect('admin/user')->with('success',"修改密码成功");
            }else{
                return redirect()->back();
            }
        }
        // 赋值当前用户id
        $user_id = $id;
        // get请求返回页面
        return view('admin.user.update',['userId' => $user_id]);
    }

    // 添加管理员
    function add(Request $request){
        // 如果是POST请求
        if($request->isMethod('POST')){
            // 获取提交的表单数据
            $data = $request->input('user');
            // 获取表单值
            $cur_login_name = $data['login_name'];
            // 查询账号是否已存在
            $has_user = User::where("login_name",$cur_login_name)->get();
            // 判断账号是否存在,不存在则返回上一个页面
            if(empty($has_user)){
                // 实例化用户模型
                $new_user = new User();
                // 赋值
                $new_user->login_name = $data['login_name'];
                // 密码加密：内置函数bcrypt()
                $new_user->password = bcrypt($data['password']);
                $new_user->name = $data['name'];
                $new_user->contract = $date['contract'];

                // 插入数据
                if($cur_user->save()){
                    return redirect('admin/user')->with('success',"添加成功");
                }else{
                    return redirect()->back();
                }
            }
            // 返回上一页
            return redirect()->back();
            
        }
        // get请求返回视图
        return view('admin.user.add');
    }
    
    // 管理员修改自己的密码

    // function personUpdate(Request $request,$id){
    //     // 根据id获取当前用户信息
    //     $cur_user = User::find($id);
    //     // 如果是post提交
    //     if($request->isMethod('POST')){
    //         // 获取表单值
    //         $new_password = $request->input('password');
    //         // 修改密码
    //         $resetpas = $this->resetPassword($id,$new_password);
    //         // 判断是否修改成功
    //         if($resetpas){
    //             return redirect()->back()->with('success',"修改密码成功");
    //         }else{
    //             return redirect()->back();
    //         }
    //     }
    //     // 
    //     return view("admin.user.person",['user' => $cur_user]);
    // }

    // 统一修改密码方法
    function resetPassword($id,$new_password){
        // 根据id查出当前用户
        $cur_user = User::find($id);
        // 内置函数bcrypt，给密码加密
        $cur_user->password = bcrypt($new_password);
        // 更新当前用户信息
        $cur_user->save();

        if($cur_user->save()){
            return true;
        }else{
            return false;
        }
    }

    // 登录
    function login(Request $request){
        // 如果是POST请求
        if($request->isMethod('POST')){
            // 获取表单账号和密码
            $login_name = $request->input('login_name');
            $cur_password = $request->input('password');
            // 根据账号查询数据库
            $user = User::where('login_name',$login_name)->first();
            // 判断账号对应的用户是否存在
            if(!empty($user)){
                // 获取数据库对应的用户密码
                $real_password = $user->password;
                // 通过Hash验证密码
                if(Hash::check($cur_password,$real_password)){
                    // Auth验证（框架内置类）:将用户登录信息加入Session中
                    if(Auth::guard('user')->attempt(['login_name' => $login_name, 'password' => $cur_password])){
                        return redirect('/admin');
                    }
                    // 如果存入信息失败，则返回登录页
                    return redirect('/admin/login');
                }
                // 验证密码失败，返回登录页
                return redirect('/admin/login');
            }
        }

        // 如果是get请求，则直接返回视图
        return view('index');
    }

    // 登出
    public function loginout(Request $request)  
    {  
        // 调用Auth登出函数
        Auth::logout();  
        // 将session中的用户信息清除
        $request->session()->forget(Auth::guard('user')->getName());  
        $request->session()->regenerate();
        // 返回登录页
        return redirect('admin/login');  
    } 

    //根据id删除数据
    function remove($id){
        // 
        $cur_data = User::find($id);
        
        //调用delete()函数删除数据，并重定向返回视图
        if($cur_data->delete()){
            // redirect与with为框架内置函数
            return redirect('admin/user')->with('success','删除成功');
        }

        // 失败则重定向到登录页，并在session加入一次性信息
        return redirect('admin/user')->with('error','删除失败');
    }


}
